package com.wtwd.campus.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wtwd.campus.entity.SysOrg;
import com.wtwd.campus.model.vo.ResultVO;
import com.wtwd.campus.model.vo.SysOrgVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zdl
 * @since 2021-06-08
 */
public interface SysOrgService {
    /**
     * 分页查询组织,及其所有下级组织
     * @param page
     * @param sysOrg
     * @return
     */
    IPage<SysOrgVO> queryPage(Page<SysOrg> page, SysOrg sysOrg);

    /**
     * 保存组织
     * @param sysOrg
     * @return
     */
    ResultVO save(SysOrg sysOrg);

    /**
     * 保存组织
     * @param sysOrg
     * @return
     */
    ResultVO updateById(SysOrg sysOrg);

    /**
     * 删除组织通过Id
     * @param id
     * @return
     */
    ResultVO deleteById(Integer id);

    /**
     * 获取下级组织
     * @param pid
     * @return
     */
    List<SysOrg> listLowerOrgByPid(Integer pid);

    /**
     * 批量保存组织权限信息
     * @param orgId
     * @param permissionIds
     * @return
     */
    ResultVO  saveOrgPermissionBatch(Integer orgId,String orgCode,String permissionIds);

    /**
     * 获取组织树通过组织编号
     * @param orgCode
     * @return
     */
    ResultVO getOrgTreeByOrgCode(String orgCode);

    /**
     * 获取组织树并指定显示组织的类型通过组织编号
     * @param orgCode
     * @param showOrgType
     * @return
     */
    ResultVO getOrgTreeByOrgCode(String orgCode,Integer showOrgType);

    /**
     * 获取拥有的组织通过组织编号
     * @param orgCode
     * @return
     */
    List<SysOrg> listOwnOrgByOrgCode(String orgCode);

    /**
     * 获取组织权限菜单树通过组织id
     * @param orgId
     */
    ResultVO getOrgPermissionTreeByOrgId(Integer orgId,Integer type);

    /**
     * 获取组织名称通过组织id
     * @param orgIds
     * @return
     */
    Map<Integer,String> getOrgNamesByOrgIds(List<Integer> orgIds);

    /**
     * 获取组织权限ID
     * @param orgId
     * @return
     */
    List<Integer> getOrgPermissionIdsByOrgId(Integer orgId);

    /**
     * 获取组织code根据id
     * @param orgId
     * @return
     */
    String getOrgCodeById(Integer orgId);

    SysOrg getSysOrgByOrgCode(String orgCode);

    SysOrg getSysOrgById(Integer orgId);

    List<SysOrg> getOverdueSysOrg(long time);

    /**
     * 续约客户及其下级
     * @param orgId
     * @return
     */
    int renewSysOrgAndSub(int orgId,Long exipreTime);

    List<Map<String,Object>> getExpirationOrg(Long timeMax,Long timeMin);
}
